from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.ui import WebDriverWait
from time import sleep
"""
1、打开百度
2、输入：刘能
3、点击百度百科刘能
4、断言链接内容是否正确
"""
# 实例化驱动
driver = webdriver.Chrome()
driver.get("https://www.baidu.com/")
driver.maximize_window()
# 设置隐式等待
# driver.implicitly_wait(15)

# sleep(3)
# 输入百度
# driver.find_element(By.ID,"kw").send_keys("刘能")
WebDriverWait(driver,10,0.5).until(EC.presence_of_element_located((By.ID,"kw"))).send_keys("刘能")
"""
WebDriverWait：显示等待关键字
(driver,10,0.5)：三个参数。 第一个参数：传入驱动；第二个参数：传入查找元素总的时长；第三个参数：每隔多久找一次元素
until(EC)：如果找不到元素就会抛出异常信息
presence_of_element_located：相当于find_element，里面需要传入一个元组
"""
# sleep(2)
# 点击搜索按钮
# driver.find_element(By.ID,'su').click()
WebDriverWait(driver,10,0.5).until(EC.presence_of_element_located((By.ID,"su"))).click()

# sleep(3)
# 点击刘能
# driver.find_element(By.XPATH,'//*[@id="1"]/div/h3/a/div/div/p/span/span/em/em').click()
WebDriverWait(driver,10,0.5).until(EC.presence_of_element_located((By.XPATH,'//*[@id="1"]/div/h3/a/div/div/p/span/span/em/em'))).click()
# sleep(5)
# 句柄切换
win = driver.window_handles
driver.switch_to.window(win[-1])
# 断言title
title = driver.title
assert title == "刘能（电视剧《乡村爱情》系列中的重要角色）_百度百科"
# text = driver.find_element(By.CLASS_NAME,"lemmaTitle_EMnlR").text
text = WebDriverWait(driver,10,0.5).until(EC.presence_of_element_located((By.CLASS_NAME,"lemmaTitle_EMnlR"))).text
assert "刘能" == text

sleep(10)


"""
三种等待：
【1】 强制等待：  代码执行到此，必须等待几s才能执行后续操作
【2】 隐式等待：    
            优点：开局声明一次，全篇元素等待都会受用，给定秒数，在规定的时间内去寻找，找到了就去操作，如果超出了最大时间限制，会抛出异常
            缺点：隐式等待必须等页面全部加载完，再去操作（有的时候不是我需要的元素，他也要全部加载出来，再去操作的）
【3】 显示等待：
            优点：在规定的时间内，频繁的去寻找元素，找到元素就会操作，不会继续寻找
            缺点：暂无（代码比较多点）
"""

